package br.com.unitunes.controller;

import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.view.Results;
import br.com.unitunes.annotation.Public;
import br.com.unitunes.model.Usuario;
import br.com.unitunes.dao.UsuarioDAO;

@Resource
public class UsuarioController {
	
	private final Result result;
	private final UsuarioDAO usuarioDAO;
	
	public UsuarioController(Result result, UsuarioDAO usuarioDAO) {
		this.result = result;
		this.usuarioDAO = usuarioDAO;
	}	

    @Public
    public void cadastro(Usuario usuario) {
    	result.include("usuario", usuario);
    }
    
    @Public
    public void inclui(Usuario usuario) {    	
    	usuario = new Usuario();
    	result.forwardTo(this).cadastro(usuario);
    }
    
    @Public   
    public void altera(Long id) {
    	result.forwardTo(this).cadastro(usuarioDAO.get(id));
    }
    
    @Public
    public void exclui(Long id) {    	
    	usuarioDAO.delete(usuarioDAO.get(id));    	
    	result.use(Results.status()).ok();
    }
        
    @Get("/usuario/emailJaCadastrado")
    public void emailJaCadastrado(String email, Long id) {
    	Usuario usuario = usuarioDAO.getByEmail(email);    	
    	Long retorno;    	
    	if (usuario != null && !usuario.getId().equals(id)) {
    		retorno = new Long(1);
    	} else {
    		retorno = new Long(0);
    	}    	
    	result.use(Results.json()).withoutRoot().from(retorno).serialize();
    }
    
    @Public
    public void grava(Usuario usuario) { //Creates or overrides user information 
    	usuarioDAO.save(usuario);    	
    	result.use(Results.json()).withoutRoot().from(usuario).serialize();
    }
}
